package com.cms.recursoshumanos.json.object;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.cms.recursoshumanos.cache.UserInfoCache;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.object.Departamento;
import com.cms.recursoshumanos.object.Empleado;
import com.cms.recursoshumanos.object.Persona;
import com.cms.recursoshumanos.object.Sede;
import com.cms.recursoshumanos.utilities.Tool;

public class JsonObjectGetMyUserDetails 
{
	public static JsonObjectGetMyUserDetails _instance = null;
	
	public String Result;
	private static final String 
		GETMYUSERDETAILS = "USERINFO",
		GETMYUSERDETAILS_STATUS = "STATUS",
		GETMYUSERDETAILS_DATA = "DATA",
		
		GETMYUSERDETAILS_DATOS_USUARIO = "DATOS_USUARIO",
		
		
		GETMYUSERDETAILS_PERSONA_ID = "persona_id",
		GETMYUSERDETAILS_PERSONA_NOMBRE_1 = "nombre_usuario_1",
		GETMYUSERDETAILS_PERSONA_NOMBRE_2 = "nombre_usuario_2",
		GETMYUSERDETAILS_PERSONA_CEDULA = "cedula_persona",
		GETMYUSERDETAILS_PERSONA_TLF_1 = "telefono_persona_1",
		GETMYUSERDETAILS_PERSONA_TLF_2 = "telefono_persona_2",
		GETMYUSERDETAILS_PERSONA_APELLIDO_1 = "apellido_usuario_1",
		GETMYUSERDETAILS_PERSONA_APELLIDO_2 = "apellido_usuario_2",
		GETMYUSERDETAILS_PERSONA_DIRECCION = "direccion_persona",
		GETMYUSERDETAILS_PERSONA_FECHA_NAC = "fecha_nacimiento",
		GETMYUSERDETAILS_PERSONA_SEXO = "sexo_persona",
		GETMYUSERDETAILS_PERSONA_FOTO = "url_foto_persona",
		GETMYUSERDETAILS_PERSONA_EMAIL = "email_persona",
		
		GETMYUSERDETAILS_DEPARTAMENTO_ID = "departamento_id",
		GETMYUSERDETAILS_DEPARTAMENTO_NOMBRE = "nombre_departamento",
		GETMYUSERDETAILS_DEPARTAMENTO_DESCRIPCION = "descripcion_departamento",
		GETMYUSERDETAILS_DEPARTAMENTO_FECHA_INICIO = "fecha_inic_departamento",
		GETMYUSERDETAILS_DEPARTAMENTO_FECHA_FIN = "fecha_fin_departamento",
		GETMYUSERDETAILS_DEPARTAMENTO_DIRECCION = "direccion_departamento",
		
		GETMYUSERDETAILS_SUPERVISOR_ID = "superior_id",
		GETMYUSERDETAILS_SUPERVISOR_NOMBRE_1 = "nombre_superior_1",
		GETMYUSERDETAILS_SUPERVISOR_NOMBRE_2 = "nombre_superior_2",
		GETMYUSERDETAILS_SUPERVISOR_APELLIDO_1 = "apellido_superior_1",
		GETMYUSERDETAILS_SUPERVISOR_APELLIDO_2 = "apellido_superior_2",
		GETMYUSERDETAILS_SUPERVISOR_CEDULA = "cedula_superior",
		GETMYUSERDETAILS_SUPERVISOR_TLF_1 = "telefono_superior_1",
		GETMYUSERDETAILS_SUPERVISOR_TLF_2 = "telefono_superior_2",
		GETMYUSERDETAILS_SUPERVISOR_EMAIL = "email_superior",
		GETMYUSERDETAILS_CARGO_DEPARTAMENTO = "cargo_departamento",
		
		GETMYUSERDETAILS_SEDE_ID = "sede_id",
		GETMYUSERDETAILS_SEDE_NOMBRE = "nombre_sede";	
	
	
			
		

	public static JsonObjectGetMyUserDetails getInstance() 
	{
		if(_instance == null)
		{
			_instance = new JsonObjectGetMyUserDetails();
		}
		
		return _instance;
	}
	public JsonObjectGetMyUserDetails()
	{
	}
	public void fromJSON (String jsonString) 
	{
		if (jsonString != null)
		{
			if (!jsonString.equals(""))
			{
				try
				{
					
					JSONObject jsonObject = new JSONObject(jsonString);
				
					if (jsonObject != null) 
					{
						
						JSONObject userdetails = jsonObject.getJSONArray(GETMYUSERDETAILS).getJSONObject(0);
						String status = userdetails.getString(GETMYUSERDETAILS_STATUS);
						
						Result = status;
						
						if (status.equals(Constant.CODE_OK))
						{
												
							JSONArray data = userdetails.getJSONArray(GETMYUSERDETAILS_DATA);
							UserInfoCache.getInstance().getListaFamiliar().resetListaFamiliar();
							JSONObject objeto_data = data.getJSONObject(0);
							JSONObject datos_usuario = objeto_data.getJSONArray(GETMYUSERDETAILS_DATOS_USUARIO).getJSONObject(0);
							
							Empleado elEmpleado = this.getElEmpleado(datos_usuario); 
							
							UserInfoCache.getInstance().setFechaCache(0);
							UserInfoCache.getInstance().setEmpleado(elEmpleado);
							
							
							
						}
						
					}
					
				} 
				catch (JSONException ex) 
				{
					ex.printStackTrace();
					Result = Constant.CODE_EMPTY;
				}
				/*catch (Exception ex) 
				{
					ex.printStackTrace();
					Result = Constant.CODE_EMPTY;
				}*/
			}
			else
			{
				Result = Constant.CODE_NOT_SERVER_RESPONSE;
			}
		}
		else
		{
			Result = Constant.CODE_NOT_SERVER_RESPONSE;
		}
	}

	public Empleado getElEmpleado( JSONObject datos_usuario)
	{
		try 
		{
			Empleado elEmpleado = new Empleado(	new Persona(Integer.parseInt(datos_usuario.getString(GETMYUSERDETAILS_PERSONA_ID)),
												datos_usuario.getString(GETMYUSERDETAILS_PERSONA_CEDULA), 
												datos_usuario.getString(GETMYUSERDETAILS_PERSONA_NOMBRE_1), 
												(datos_usuario.getString(GETMYUSERDETAILS_PERSONA_NOMBRE_2).equals("null") ?
														null:
															datos_usuario.getString(GETMYUSERDETAILS_PERSONA_NOMBRE_2)), 
												datos_usuario.getString(GETMYUSERDETAILS_PERSONA_APELLIDO_1),
												(datos_usuario.getString(GETMYUSERDETAILS_PERSONA_APELLIDO_2).equals("null") ? 
														null:
															datos_usuario.getString(GETMYUSERDETAILS_PERSONA_APELLIDO_2)),
												datos_usuario.getString(GETMYUSERDETAILS_PERSONA_DIRECCION), 
												datos_usuario.getString(GETMYUSERDETAILS_PERSONA_TLF_1), 
												 (datos_usuario.getString(GETMYUSERDETAILS_PERSONA_TLF_2).equals("null") ?
														null:
															datos_usuario.getString(GETMYUSERDETAILS_PERSONA_TLF_2)), 
												datos_usuario.getString(GETMYUSERDETAILS_PERSONA_FOTO), 
												Tool.getInstance().parseStringToDate(datos_usuario.getString(GETMYUSERDETAILS_PERSONA_FECHA_NAC)),
												datos_usuario.getString(GETMYUSERDETAILS_PERSONA_SEXO),
												datos_usuario.getString(GETMYUSERDETAILS_PERSONA_EMAIL)),
												new Departamento(Integer.parseInt(datos_usuario.getString(GETMYUSERDETAILS_DEPARTAMENTO_ID)), 
																	datos_usuario.getString(GETMYUSERDETAILS_DEPARTAMENTO_NOMBRE), 
																	datos_usuario.getString(GETMYUSERDETAILS_DEPARTAMENTO_DESCRIPCION),
																	Tool.getInstance().parseStringToDate(datos_usuario.getString(GETMYUSERDETAILS_DEPARTAMENTO_FECHA_INICIO)),
																	Tool.getInstance().parseStringToDate(datos_usuario.getString(GETMYUSERDETAILS_DEPARTAMENTO_FECHA_FIN)),
																	getElSupervisor(datos_usuario),
																			datos_usuario.getString(GETMYUSERDETAILS_DEPARTAMENTO_DIRECCION)),
												new Sede(Integer.parseInt(datos_usuario.getString(GETMYUSERDETAILS_SEDE_ID)), 
																			datos_usuario.getString(GETMYUSERDETAILS_SEDE_NOMBRE)),
												datos_usuario.getString(GETMYUSERDETAILS_CARGO_DEPARTAMENTO));
			return elEmpleado;
		}
		catch (NumberFormatException e) 
		{
			e.printStackTrace();
			return null;
		} 
		catch (JSONException e) 
		{
			e.printStackTrace();
			return null;
		}
		
	}
	public Persona getElSupervisor(JSONObject json_persona)
	{
		try 
		{
			
			if (json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_ID) == null)
			{
				return null;
			}
			
			Persona elSupervisor = new Persona(Integer.parseInt(json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_ID)), 
												json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_CEDULA), 
												json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_NOMBRE_1), 
												(json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_NOMBRE_2).equals("null") ?
														null :
															json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_NOMBRE_2)), 
												json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_APELLIDO_1), 
												(json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_APELLIDO_2).equals("null") ?
														null:
															json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_APELLIDO_2)), 
												null, 
												json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_TLF_1), 
												(json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_TLF_2).equals("null") ?
														null:
															json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_TLF_2)),
												null, 
												null, 
												null, 
												json_persona.getString(GETMYUSERDETAILS_SUPERVISOR_EMAIL));
			return elSupervisor;
		} 
		catch (NumberFormatException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		} 
		catch (JSONException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	}
	public String getResult()
	{
		return Result;
	}
	
}


